|
54 |
|
# datetime - примеры применения
Импорт библиотеки
import datetime
print(f"now: {datetime.datetime.now()}")
# now: 2024-03-05 21:32:59.492866
from datetime import datetime
print(f"now: {datetime.now()}")
now: 2024-03-05 21:32:59.492866
Методы библиотеки
Получить текущую дату и время
from datetime import datetime
print(f"now: {datetime.now()}")
now: 2024-03-05 21:32:59.492866
print(f"today: {datetime.today()}")
today: 2024-03-05 21:32:59.492866
Подставить свои значения
print(f"now: {datetime.today().replace(year=2022, month=2, day=5)}")
now: 2022-02-05 21:43:51.635193
print(f"now: {datetime.today().replace(year=2034)}")
now: 2034-03-05 21:44:59.627618
Получить день недели
print(f"now: {datetime.today().weekday()}")
0
- понедельник7
- воскресенье
Преобразовать формат возвращаемой даты
print(f'now: {datetime.now().strftime("%Y-%m-%d_%H:%M:%S")}')
now: 2024-03-05_21:51:43
print(f'now: {datetime.now().strftime("Год: %Y Месяц %m Число: %d Время: %H:%M:%S")}')
now: Год: 2024 Месяц 03 Число: 05 Время: 21:52:45
print(f'now: {datetime.now().strftime("%y%M Число: %d Время: %H:%M:%s")}')
now: Год: 2024 Месяц 03 Число: 05 Время: 21:52:1709664773
print(f'now: {datetime.now().strftime("%y.%m.%d")}')
now: 24.03.05
Также можно обрезать значение с помощью срезов строк:
# получить первые 5 символов
print(f'{str(datetime.now().strftime("%Y-%m-%d_%H:%M:%S"))[-8:]}')
# получить последние 8 символов
print(f'{str(datetime.now().strftime("%Y-%m-%d_%H:%M:%S"))[-8:]}')
21:58:24
print(f'{str(datetime.now().strftime("Год: %Y-%m-%d_%H:%M:%S"))[:15].replace("2024", "2032")}')
Год: 2032-03-05
Прочие сценарии
Получить объект datetime из posix
print(datetime.fromtimestamp(0))
1970-01-01 03:00:00
print(datetime.fromtimestamp(995789256))
2001-07-22 12:07:36
import time
my_dt_obj = datetime.fromtimestamp(time.time())
print(my_dt_obj)
print(type(my_dt_obj))
2024-03-05 22:13:57.985201
<class 'datetime.datetime'>
Получить объект datetime из стринги
Для этого передаём текст и указываем шаблон, по которому можно распарсить дату:
my_txt_date = "25|02|24"
my_dt_obj = datetime.strptime(my_txt_date, "%y|%m|%d")
print(my_dt_obj)
print(type(my_dt_obj))
2025-02-24 00:00:00
<class 'datetime.datetime'>
Если же не соблюдать форматирование исходного текста:
my_txt_date = "25|02|24"
my_dt_obj = datetime.strptime(my_txt_date, "%y-%m-%d")
Traceback (most recent call last):
ValueError: time data '25|02|24' does not match format '%y-%m-%d'
То есть, шаблон используемый для преобразования в объект datetime
должен соответствовать передаваемому тексту.
Получить дату и время через datetime
Не путать объекты:
- datetime.time
- datetime.date
- datetime.datetime
Создать дату можно "напрямую" через функцию date
. Но нужно учитывать, что в таком случае импорт нужно делать следующим образом:
import datetime
my_date=datetime.date(2027, 2, 23)
print(f"my_date: {my_date}")
print(f"type: {type(my_date)}")
my_date: 2027-02-23
type: <class 'datetime.date'>
Объект, получаемый таким способом будеть иметь тип <class 'datetime.date'>
(а не <class 'datetime.datetime'>
).
То же самое касается и времени:
my_date = datetime.time(12, 7, 24)
print(my_date)
12:07:24
type: <class 'datetime.time'>
Получение даты последнего изменения файла
Дата последнего изменения файла на уровне OS получаем через:
import os
my_file_date = os.path.getmtime(my_file)
this_file_date = datetime.fromtimestamp(my_file_date)
fromtimestamp
используется для преобразования даты из POSIX.
timedelta - сравнение дат
from datetime import datetime, timedelta
now = datetime.now()
one_day_period = timedelta(days=1)
yesterday = now - one_day_period
print(f"now: {now}")
print(f"one_day_period: {one_day_period}")
print(f"type(one_day_period): {type(one_day_period)}")
print(f"yesterday: {yesterday}")
now: 2024-03-05 23:04:02.703509
one_day_period: 1 day, 0:00:00
type(one_day_period): <class 'datetime.timedelta'>
yesterday: 2024-03-04 23:04:02.703509
Как видим, один день "убавился". Класс timedelta
поддерживает следующие параметры:
- days
- seconds
- microseconds
- milliseconds
- minutes
- hours
- weeks
Тем самым с помощью timedelta
мы можем формировать новые даты:
now = datetime.now()
next_week = now + timedelta(weeks=1)
Также этот метод удобно использовать в сравнениях:
time_now = datetime.now()
end_time = time_now + datetime.timedelta(seconds=50)
if time_now >= end_time:
do_something...